// 行为分析器
class BehaviorAnalyzer {
    constructor(userId) {
        this.userId = userId;
        this.transactions = this.loadUserTransactions();
        this.behaviorData = this.loadBehaviorData();
    }
    
    // 加载用户交易记录
    loadUserTransactions() {
        try {
            const allTransactions = JSON.parse(localStorage.getItem('iInvestTransactions') || '[]');
            return allTransactions.filter(t => t.userId === this.userId);
        } catch (error) {
            console.error('加载交易记录失败:', error);
            return [];
        }
    }
    
    // 加载行为数据
    loadBehaviorData() {
        try {
            const allBehaviorData = JSON.parse(localStorage.getItem('iInvestBehaviorData') || '[]');
            const userData = allBehaviorData.find(b => b.userId === this.userId);
            
            if (!userData) {
                // 如果用户没有行为数据，创建初始数据
                return this.initializeBehaviorData();
            }
            
            return userData;
        } catch (error) {
            console.error('加载行为数据失败:', error);
            return this.initializeBehaviorData();
        }
    }
    
    // 初始化行为数据
    initializeBehaviorData() {
        return {
            userId: this.userId,
            biases: {
                overconfidence: 0,
                lossAversion: 0,
                dispositionEffect: 0,
                confirmationBias: 0,
                herdBehavior: 0
            },
            tags: [],
            insights: [],
            lastUpdated: new Date().toISOString()
        };
    }
    
    // 分析交易行为
    analyzeTransactions() {
        if (this.transactions.length === 0) {
            return this.behaviorData;
        }
        
        // 分析各种行为偏差
        this.analyzeOverconfidence();
        this.analyzeLossAversion();
        this.analyzeDispositionEffect();
        this.analyzeConfirmationBias();
        this.analyzeHerdBehavior();
        
        // 生成行为标签
        this.generateBehaviorTags();
        
        // 生成洞察建议
        this.generateInsights();
        
        // 更新最后分析时间
        this.behaviorData.lastUpdated = new Date().toISOString();
        
        // 保存更新后的行为数据
        this.saveBehaviorData();
        
        return this.behaviorData;
    }
    
    // 分析过度自信
    analyzeOverconfidence() {
        // 计算交易频率
        const recentTransactions = this.getRecentTransactions(30); // 最近30天
        const transactionCount = recentTransactions.length;
        
        // 假设每天超过1笔交易可能表示过度自信
        const dailyAvg = transactionCount / 30;
        this.behaviorData.biases.overconfidence = Math.min(100, Math.max(0, dailyAvg * 20));
    }
    
    // 分析损失厌恶
    analyzeLossAversion() {
        // 分析持有亏损仓位的时间 vs 盈利仓位的时间
        const completedTrades = this.transactions.filter(t => t.status === 'completed');
        let lossHoldingDays = 0;
        let winHoldingDays = 0;
        let lossCount = 0;
        let winCount = 0;
        
        completedTrades.forEach(trade => {
            if (trade.profit < 0) {
                lossHoldingDays += trade.holdingDays || 0;
                lossCount++;
            } else {
                winHoldingDays += trade.holdingDays || 0;
                winCount++;
            }
        });
        
        const avgLossHolding = lossCount > 0 ? lossHoldingDays / lossCount : 0;
        const avgWinHolding = winCount > 0 ? winHoldingDays / winCount : 0;
        
        // 如果持有亏损仓位的时间明显长于盈利仓位，可能存在损失厌恶
        if (avgLossHolding > 0 && avgWinHolding > 0) {
            const ratio = avgLossHolding / avgWinHolding;
            this.behaviorData.biases.lossAversion = Math.min(100, Math.max(0, (ratio - 1) * 50));
        }
    }
    
    // 分析处置效应
    analyzeDispositionEffect() {
        // 分析过早卖出盈利资产和过久持有亏损资产的倾向
        const completedTrades = this.transactions.filter(t => t.status === 'completed');
        let earlyWinSales = 0;
        let lateLossSales = 0;
        let totalWins = 0;
        let totalLosses = 0;
        
        completedTrades.forEach(trade => {
            if (trade.profit > 0) {
                totalWins++;
                // 如果盈利但持有时间很短，可能是过早卖出
                if (trade.holdingDays < 7) { // 假设7天内卖出为"过早"
                    earlyWinSales++;
                }
            } else {
                totalLosses++;
                // 如果亏损但持有时间很长，可能是过久持有
                if (trade.holdingDays > 90) { // 假设90天以上为"过久"
                    lateLossSales++;
                }
            }
        });
        
        const earlyWinRatio = totalWins > 0 ? earlyWinSales / totalWins : 0;
        const lateLossRatio = totalLosses > 0 ? lateLossSales / totalLosses : 0;
        
        // 综合计算处置效应得分
        this.behaviorData.biases.dispositionEffect = Math.min(100, 
            Math.max(0, (earlyWinRatio + lateLossRatio) * 50));
    }
    
    // 分析确认偏误
    analyzeConfirmationBias() {
        // 分析是否倾向于投资熟悉/已有的资产
        const uniqueAssets = [...new Set(this.transactions.map(t => t.assetCode))];
        const totalTransactions = this.transactions.length;
        
        // 如果交易集中在少数资产上，可能存在确认偏误
        const concentrationRatio = uniqueAssets.length / totalTransactions;
        this.behaviorData.biases.confirmationBias = Math.min(100, 
            Math.max(0, (1 - concentrationRatio) * 100));
    }
    
    // 分析羊群效应
    analyzeHerdBehavior() {
        // 分析是否倾向于投资热门资产
        // 这里简化处理，实际应用中需要市场数据
        let herdTrades = 0;
        
        this.transactions.forEach(trade => {
            // 假设某些资产代码代表热门资产
            const hotAssets = ['TSLA', 'AAPL', 'NVDA', 'AMZN']; // 示例
            if (hotAssets.includes(trade.assetCode)) {
                herdTrades++;
            }
        });
        
        const herdRatio = this.transactions.length > 0 ? 
            herdTrades / this.transactions.length : 0;
            
        this.behaviorData.biases.herdBehavior = Math.min(100, 
            Math.max(0, herdRatio * 100));
    }
    
    // 生成行为标签
    generateBehaviorTags() {
        const tags = [];
        const biases = this.behaviorData.biases;
        
        if (biases.overconfidence > 70) {
            tags.push({
                type: 'overconfidence',
                name: '频繁交易',
                description: '您可能交易过于频繁，存在过度自信倾向'
            });
        }
        
        if (biases.lossAversion > 70) {
            tags.push({
                type: 'lossAversion',
                name: '损失厌恶',
                description: '您可能过于害怕损失，导致过早止损或过久持有亏损资产'
            });
        }
        
        if (biases.dispositionEffect > 70) {
            tags.push({
                type: 'dispositionEffect',
                name: '处置效应',
                description: '您可能倾向于过早卖出盈利资产，过久持有亏损资产'
            });
        }
        
        if (biases.confirmationBias > 70) {
            tags.push({
                type: 'confirmationBias',
                name: '确认偏误',
                description: '您可能倾向于寻找支持自己观点的信息，忽视反面证据'
            });
        }
        
        if (biases.herdBehavior > 70) {
            tags.push({
                type: 'herdBehavior',
                name: '羊群效应',
                description: '您可能倾向于跟随大众投资，而非独立分析'
            });
        }
        
        this.behaviorData.tags = tags;
    }
    
    // 生成洞察建议
    generateInsights() {
        const insights = [];
        const biases = this.behaviorData.biases;
        
        // 根据偏差程度生成个性化建议
        if (biases.overconfidence > 60) {
            insights.push({
                type: 'warning',
                title: '过度交易风险',
                content: '您最近的交易频率较高，可能会增加交易成本并降低整体收益。建议减少交易次数，专注于长期投资策略。',
                suggestion: '尝试制定明确的交易计划，并坚持执行，避免情绪化交易。'
            });
        }
        
        if (biases.lossAversion > 60) {
            insights.push({
                type: 'warning',
                title: '损失厌恶影响决策',
                content: '您可能因为害怕损失而错过了某些投资机会，或过久持有表现不佳的资产。',
                suggestion: '建立基于基本面的止损策略，而不是基于情绪反应。'
            });
        }
        
        if (biases.dispositionEffect > 60) {
            insights.push({
                type: 'warning',
                title: '处置效应明显',
                content: '您可能倾向于过早卖出盈利资产，同时过久持有亏损资产。',
                suggestion: '考虑采用系统化的获利了结和止损策略，避免情绪干扰。'
            });
        }
        
        if (insights.length === 0) {
            insights.push({
                type: 'positive',
                title: '投资行为良好',
                content: '您的投资行为显示出良好的纪律性和理性。继续保持！',
                suggestion: '定期回顾您的投资策略，确保与您的财务目标保持一致。'
            });
        }
        
        this.behaviorData.insights = insights;
    }
    
    // 获取最近交易
    getRecentTransactions(days) {
        const cutoffDate = new Date();
        cutoffDate.setDate(cutoffDate.getDate() - days);
        
        return this.transactions.filter(t => {
            const transactionDate = new Date(t.transactionDate);
            return transactionDate >= cutoffDate;
        });
    }
    
    // 保存行为数据
    saveBehaviorData() {
        try {
            let allBehaviorData = JSON.parse(localStorage.getItem('iInvestBehaviorData') || '[]');
            
            // 查找并更新用户数据
            const userIndex = allBehaviorData.findIndex(b => b.userId === this.userId);
            if (userIndex !== -1) {
                allBehaviorData[userIndex] = this.behaviorData;
            } else {
                allBehaviorData.push(this.behaviorData);
            }
            
            localStorage.setItem('iInvestBehaviorData', JSON.stringify(allBehaviorData));
            return true;
        } catch (error) {
            console.error('保存行为数据失败:', error);
            return false;
        }
    }
}